package com.dhcc.DRGsHosp.web.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.DocumentException;
import org.openkoala.koala.commons.InvokeResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.dhcc.DRGsHosp.facade.XmlStructureFacade;
import com.dhcc.DRGsHosp.facade.dto.XmlStructureDTO;


/**
 * 
 * @title		:XmlStructureController.java
 * @description	:xml结构
 * @author		:mazhaoyan
 * @date		:2017年4月18日
 * @version     :1.0
 * @copyright   :DHCC 2013-2014
 */


@Controller("drgsHospWebControllerMzy170418")
@RequestMapping(value="xmlStructure")
public class XmlStructureController {
	@Autowired
	XmlStructureFacade xmlStructureFacade;
	List<String> filesPath = new ArrayList<String>();// 上传成功的文件路径
	
	@ResponseBody
	@RequestMapping("/filesUpload")  
    public InvokeResult filesUpload(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException {  
		 filesPath = new ArrayList<String>();//每次调用清空文件路径
		String fileCat = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());//定义一个随时间变化的变量，加在filename前，使上传的文件不重复
		//创建一个通用的多部分解析器  
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
        //判断 request 是否有文件上传,即多部分请求  
        if(multipartResolver.isMultipart(request)){  
            //转换成多部分request    
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;  
            //取得request中的所有文件名  
            Iterator<String> iter = multiRequest.getFileNames();  
            while(iter.hasNext()){  
                //记录上传过程起始时的时间，用来计算上传时间  
                int pre = (int) System.currentTimeMillis();  
                //取得上传文件  
                MultipartFile file = multiRequest.getFile(iter.next());  
                if(file != null){  
                    //取得当前上传文件的文件名称  
                    String myFileName = file.getOriginalFilename();  
                    //如果名称不为“”,说明该文件存在，否则说明该文件不存在  
                    if(myFileName.trim() !=""){

                        System.out.println(myFileName);  
                        //重命名上传后的文件名  
                        String fileName = fileCat+"_"+ file.getOriginalFilename();  
                        //定义上传路径  
                        String path = request.getSession().getServletContext().getRealPath("/")+"upload";
                        File localFile = new File(path);
                        if (!localFile.exists()) {
							localFile.mkdirs();
						}
                        localFile = new File(path + File.separatorChar + fileName);
                        try {
							file.transferTo(localFile);
							filesPath.add(path + File.separatorChar + fileName);
						} catch (Exception e) {
							e.printStackTrace();
						}//文件上传至服务器  
                    }  
                }  
                //记录上传该文件后的时间  
                int finaltime = (int) System.currentTimeMillis();  
                System.out.println("本文件上传时间："+(finaltime - pre)+"ms");  
            }  
              
        }  
        return InvokeResult.success();
    } 
	/**
	 * 
	 * @methodname    :getTableStructure
	 * @description   : 获取表结构
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2017年4月18日
	 */
	@ResponseBody
	@RequestMapping("/getTableStructure")
	public InvokeResult getTableStructure(String tableName){
		List<Map<String,Object>> structure = xmlStructureFacade.getTableStructure(tableName);
		return InvokeResult.success(structure);
	}
	/**
	 * 
	 * @methodname    :readJson
	 * @description   : 读json对象
	 * @param         :
	 * @author        :mazhaoyan
	 * @return        :
	 * @date          :2017年4月19日
	 */
	@ResponseBody
	@RequestMapping("/readJson")
	public InvokeResult readJson(){
		String ztreeJson = "";
        for (String filePath : filesPath) {
        	ztreeJson = xmlStructureFacade.readJson(filePath);
		}
		return InvokeResult.success(ztreeJson);
	}
	
	
	/**
	 * 
	 * @Title: saveXml
	 * @author:LiQingYang   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param json
	 * @param: @return      
	 * @return: InvokeResult      
	 * @throws DocumentException 
	 * @throws
	 * @date:2017年4月25日 上午10:43:36
	 */
    @ResponseBody
    @RequestMapping("/saveXml")
    public InvokeResult saveXml(XmlStructureDTO xmlStructureDTO){
        String state = xmlStructureFacade.creatXmlStructure(xmlStructureDTO);
        return InvokeResult.success(state);
    }
    
    /**
     * 
     * @Title: getXmlInfoByStructure
     * @author:LiQingYang   
     * @Description: TODO(这里用一句话描述这个方法的作用)   
     * @param: @return      
     * @return: InvokeResult      
     * @throws
     * @date:2017年4月26日 下午4:17:16
     */
    @ResponseBody
    @RequestMapping("/getXmlInfoByStructure")
    public InvokeResult getXmlInfoByStructure(){
        for (String filePath : filesPath) {
        	xmlStructureFacade.getXmlInfoByStructure(filePath);
		}
        return InvokeResult.success();
    }
    
   /**
    * 
    * @Title: nodeInfoRemove
    * @author:LiQingYang   
    * @Description: TODO(这里用一句话描述这个方法的作用)   
    * @param: @param treeId
    * @param: @return      
    * @return: InvokeResult      
    * @throws
    * @date:2017年5月5日 下午3:10:17
    */
    @ResponseBody
    @RequestMapping("/nodeInfoRemove")
    public InvokeResult nodeInfoRemove(String nodeId){
        
        xmlStructureFacade.nodeInfoRemove(nodeId);
        
        return InvokeResult.success();
    }
   /**
    * Description ：获取xml配置表信息 
    * date: 2017年5月12日 下午3:41:54  
    * @author ShaozhiYuan
    * @version V1.0 DHC
    */
    @ResponseBody
    @RequestMapping("/findXMLTable")
    public InvokeResult findXMLTable(String templateType){
		return InvokeResult.success(xmlStructureFacade.findXMLTable(templateType));
    }
    
    /**
     *  根据节点配置路径查询节点信息
     *  findNodeConfigInfo.  
     *  @Description：
     *  @Author ChenHanlin
     *  @param path
     *  @return 
     *  @Date:2017年11月29日下午3:00:59
     */
    @ResponseBody
    @RequestMapping("/findNodeConfigInfoByPath")
    public InvokeResult findNodeConfigInfoByPath(String path){
    	return InvokeResult.success(xmlStructureFacade.findNodeConfigInfoByPath(path));
    }
    
    
    
}
